/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef __ROUTER_H__
#define __ROUTER_H__
#include "core/module.h"
#include "core/sockness.h"
#include "core/context.h"

namespace mod {
	// 网关(即网关路由器)
	class RouterModule final : public Module {
	public:
		explicit RouterModule(std::shared_ptr<Context> ctx, const std::string &module_name);
		~RouterModule() override;
		RouterModule(const RouterModule &)            = delete;
		RouterModule &operator=(const RouterModule &) = delete;
		RouterModule(RouterModule &&)                 = delete;
		RouterModule &operator=(RouterModule &&)      = delete;

		bool Init() override;
		void Start() override;
		void Stop() override;

		inline int SockFd() const { return gateway_sockfd; }                   // 共享网关Socket
		inline int StaticAgentSockFd() const { return static_agent_sockfd; }   // 静态代理
		inline int DynamicAgentSockFd() const { return dynamic_agent_sockfd; } // 动态代理

	private:
		int gateway_sockfd       = -1; // 网关Socket，应用级生命周期
		int dynamic_agent_sockfd = -1; // 动态代理Socket，应用级生命周期
		int static_agent_sockfd  = -1; // 静态代理Socket，应用级生命周期

		listen_handler gateway_handler();      // 网关处理程序
		listen_handler agent_handler();        // 动态代理处理程序
		listen_handler static_agent_handler(); // 静态代理处理程序
		listen_handler session_resp_handler(); // 会话响应处理程序
	}; // class RouterModule
} // namespace mod
#endif // Gateway_MODULE_H
